package day230509;

import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/5/9 19:58
 * 红与黑
 */
public class Main01 {

    static int[][] direction = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; // 方向数组用于深搜遍历

    static int count = 0; // 记录黑色可达瓷砖个数

    public static void main(String[] args) {
        Scanner scan  = new Scanner(System.in);
        while (scan.hasNext()) {
            int m = scan.nextInt();
            int n = scan.nextInt();
            // 录入地图
            // ”.“ 黑色瓷砖,”#“ 白色瓷砖,”@“ 起始位置的黑色瓷砖
            char[][] map = new char[m][n];
            int x = 0;
            int y = 0;
            for (int i = 0; i < m; i++) {
                String input = scan.next();
                for (int j = 0; j < n; j++) {
                    map[i][j] = input.charAt(j);
                    if (map[i][j] == '@') {
                        // 记录起始位置
                        x = i;
                        y = j;
                    }
                }
            }
            // 深度优先的方式, 记录黑色瓷砖的个数
            count = 0;
            dfs(map, x, y, m, n);
            // 打印个数
            System.out.println(count);
        }
        scan.close();
    }

    // 深度优先搜索
    private static void dfs(char[][] map, int x, int y, int m, int n) {
        // 边界
        if (x < 0 || y < 0 || x >= m || y >= n) {
            return;
        }
        // 如果当前是白色瓷砖, 则没必要统计
        if (map[x][y] == '#') {
            return;
        }
        // 黑色瓷砖
        ++count;
        map[x][y] = '#'; // 将黑色瓷砖涂成白色, 避免重复访问
        // 四个方向深度搜索
        for (int i = 0; i < direction.length; i++) {
            int curX = x + direction[i][0];
            int curY = y + direction[i][1];
            dfs(map, curX, curY, m, n);
        }
    }
}
